#ifndef PRYN_PHOTOSHOP_H
#define PRYN_PHOTOSHOP_H

#include <stdint.h>
#include <pryn.h>
#include <windows.h>

typedef struct PhotoshopAboutRecord PhotoshopAboutRecord;
typedef struct PhotoshopPlatformDataWindows PhotoshopPlatformDataWindows;
typedef struct PhotoshopPlugin PhotoshopPlugin;

extern HWND photoshopWindow; /// Main Photoshop window.
extern ATOM photoshopWindowClass; /// Window class for Photoshop.
extern PrynState *photoshopState; /// Pryn state for Photoshop.

enum PhotoshopSelector
{
	PhotoshopSelectorDisplayAboutBox = 0,
};

enum PhotoshopError
{
	PhotoshopErrorPickerBadParameters = -30800,
	PhotoshopErrorAcquireBadParameters = -30000,
	PhotoshopErrorAcquireNoScanner = -30001,
	PhotoshopErrorAcquireScanner = -30002,
	PhotoshopErrorExportBadParameters = -30200,
	PhotoshopErrorExportBadMode = -30201,
	PhotoshopErrorFilterBadParameters = -30100,
	PhotoshopErrorFilterBadMode = -30101,
	PhotoshopErrorFormatBadParameters = -30500,
	PhotoshopErrorFormatBadMode = -30501,
	PhotoshopErrorSelectionBadParameters = -30700,
	PhotoshopErrorSelectionBadMode = -30701,
	PhotoshopErrorPluginHostInsufficient = -30900,
	PhotoshopErrorPluginPropertyUndefined = -30901,
	PhotoshopErrorHostDoesNotSupportColStep = -30902,
	PhotoshopErrorInvalidSamplePointer = -30903,
};

struct PhotoshopAboutRecord
{
	void *platform; /// Platform-specific data.
	void *basic; /// PICA basic suite.
	void *reference; /// Reference used by PICA.
	char reserved [244]; /// Reserved bytes, set to zero.
};

/// Platform-specific data for Microsoft Windows.
struct PhotoshopPlatformDataWindows
{
	intptr_t window; /// Main window.
};

/// Mediator-specific Photoshop plugin information.
struct PhotoshopPlugin
{
	HMODULE module;
};

#endif /* PRYN_PHOTOSHOP_H */
